class UserF {
    name: string;
    // JS 的语法行为上是不存在私有属性概念
    // TS 强化私有属性的定义概念
    // public 修饰的属性和方法可以被class外部的实例直接调用
    // private 修饰的属性和方法只能被该class内部进行直接调用
    private _age:number;
    sex:string;
    constructor (name:string,age:number,sex:string){
        this.name = name;
        this._age = age;
        this.sex = sex;
    }
    say():void{
        console.log(this.name, this._age,this.sex);
    }

    // 通过 get set 关键字 完成对私有属性的包装
    //     属性劫持
    //  面向对象的三大特征之一：封装
    get age(){
        return this._age;
    }
    set age(nv){
        this._age = nv;
    }
}
var user10:UserF = new UserF("秋香",23,"f");
console.log(user10.name);
// console.log(user10._age);
console.log(user10.age);
console.log(user10.sex);
user10.say();
user10.age = 123;
console.log(user10.age)
